使用 Windows Docker Desktop 建立 Oracle 環境
TLDR
- Oracle 官方不再提供直接下載的 Docker Image,必須從 GitHub 下載 Dockerfile 並手動建置。
- Windows 環境下必須具備 Linux Bash Shell(如 Git Bash 或 WSL)。
- 建置 Image 時,若遇到
MD5 checksums錯誤,可加上-i參數忽略檢查。 - 若建置過程中出現 Image 不存在的錯誤,請檢查 Dockerfile 中的
FROM oraclelinuxtag 是否過舊,建議改為7-slim。 - 12c 以上版本採用 CDB/PDB 架構,建立使用者時需切換至 PDB,並使用
SERVICE_NAME進行連線。 - 容器啟動後,若發現自訂使用者消失,通常是因為 PDB 掛載較慢,請耐心等待。
- 經測試,11g 與 12c XE 版本在 Windows 下易發生資料夾權限問題,建議優先使用 19c SE2 版本。
環境建置與 Image 製作
什麼情況下會遇到這個問題:當你需要安裝 Oracle 資料庫,但 Docker Hub 已無官方預建 Image 時。
由於 Oracle 官方已停止提供直接下載的 Image,必須透過 Oracle GitHub 資源進行建置。在 Windows 環境下,請確保已安裝 Git Bash 或 WSL 以執行 Linux Shell 指令。
建置步驟與注意事項
- 下載對應版本的 Dockerfile 後,進入該目錄執行建置指令:
./buildContainerImage.sh -v [version] -t [image_name:tag] [-e | -s | -x] [-i] [-o] - 處理 MD5 錯誤:若執行時出現
MD5 checksums錯誤,請在指令後方加上-i參數以忽略檢查。 - 處理 Image 不存在錯誤:若建置失敗並顯示 Image 不存在,請開啟 Dockerfile 檢查
FROM指令後的 tag(例如oraclelinux),並至 Oracle Docker Hub 確認該 tag 是否存在,建議更新為7-slim。
容器部署與設定
什麼情況下會遇到這個問題:當 Image 建置完成,需要透過 Docker Compose 啟動服務時。
請使用以下範本建立 docker-compose.yml:
yaml
version: '3.7'
services:
TP-Oracle:
image: oracle/database:{image tag}
container_name: TP-Oracle
ports:
- 1521:1521
- 5500:5500
- 8080:8080
volumes:
- {local oradata}:/opt/oracle/oradata
- {local scripts/startup}:/opt/oracle/scripts/startup
- {local scripts/setup}:/opt/oracle/scripts/setup
restart: always
environment:
- ORACLE_PWD={your password}
- ORACLE_CHARACTERSET=AL32UTF8TIP
容器啟動需要較長時間,請透過 Docker Dashboard 查看 Log 確認初始化進度。
資料庫使用者管理與 PDB 切換
什麼情況下會遇到這個問題:在使用 12c 以上版本時,因 CDB/PDB 架構導致無法直接登入或找不到使用者。
若出現 ORA-01017: invalid username/password 錯誤,請依下列步驟處理:
- 執行
show pdbs查看 PDB 名稱(通常為ORCLPDB1或XEPDB1)。 - 執行
ALTER SESSION SET CONTAINER={查詢到的名稱}切換至 PDB。 - 在 PDB 中重新建立使用者與權限。
- 連線時,請務必使用
SERVICE_NAME={PDB Name}進行連線,而非SID。
常見問題與踩雷紀錄
資料夾權限異常
在 Windows 環境下,安裝 11g 與 12c 的 XE 版本常發生資料夾權限錯誤,導致 Container 無法正常運行。經測試,19c SE2 版本在 Windows 下運作較為穩定。
使用者消失問題
當電腦或 Docker 重啟後,若發現剛建立的使用者消失,通常是因為 PDB 資料庫掛載速度較慢。請靜置等待一段時間,待資料庫完全啟動後即可恢復正常。
異動歷程
- 2022-10-24 初版文件建立。
